﻿using System;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
using E4RPDevExpress10;
using Movements.DataSet;

namespace Movements.Controls
{
    public partial class TargetEntityListUserControl : XtraUserControl, IGridView, IList
    {
        private Controller _controller;

        #region Properties

        public Controller Controller
        {
            set
            {
                _controller = value;
                SetGridDataSource();
                _controller.TargetEntitySaved += delegate { SetGridDataSource(); };
            }
        }

        #endregion

        public TargetEntityListUserControl()
        {
            InitializeComponent();
            gridView.DoubleClick += GridViewDoubleClick;
        }

        #region Private Methods

        private void SetGridDataSource()
        {
            var dataSet = _controller.GetTargetEntities();
            gridControl.DataSource = null;
            gridControl.DataSource = dataSet;
            gridControl.DataMember = dataSet.EntidadeDestino.TableName;
        }

        private void ShowTargetEntity(long documentId)
        {
            var window = new TargetEntityXtraForm { DocumentId = documentId, Controller = _controller };
            window.ShowDialog();
        }

        #endregion

        #region IGridView

        public GridView GridView()
        {
            return gridView;
        }

        public string ListName
        {
            get { return "TargetEquipmentListUserControl"; }
        }

        #endregion

        public void AddDocument()
        {
            ShowTargetEntity(-1);
        }

        public void DeleteDocument()
        {
            var targetEntity = (EntidadeDestinoDataSet.EntidadeDestinoRow)gridView.GetDataRow(gridView.FocusedRowHandle);
            if (targetEntity == null)
            {
                MessageBox.Show(this, "Não é possível eliminar. Por favor, seleccione uma entidade da lista.", "Entidade destino", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (!_controller.CanDeleteTargetEntity(targetEntity.Id))
            {
                MessageBox.Show(this, "Não é possível eliminar, dado que existem movimentos associados.", "Entidade destino", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (MessageBox.Show(this, "Tem a certeza que deseja eliminar o registo?", "Entidade destino", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                _controller.DeleteTargetEntity(targetEntity.Id);
        }

        void GridViewDoubleClick(object sender, EventArgs e)
        {
            var targetEntity = (EntidadeDestinoDataSet.EntidadeDestinoRow)gridView.GetDataRow(gridView.FocusedRowHandle);
            if (targetEntity == null)
                return;
            ShowTargetEntity(targetEntity.Id);
        }
    }
}
